欢迎来到第二部分.在写完前一部分之后我意识到如果把这些代码更模块化对你将会更有帮助.我说模块化意思是:不用每次应用都要拷贝,粘贴相同的代码.更简单的方案是建一个继承了.net服务端控件功能的自定义控件.这不仅可使我们定制一些我们想做的事件,而且利用了被继承控件里已有的强大的功能.
我们来建立一个信用卡认证控件.首先我们需要继承Basevalidator's的功能.当然你可以自己写,但那不是一个严格意义上的自定义控件,不是吗?不仅如此而且会占用你的很多时间.因此使用现成的东西对我们来说更划算.现在我们就开始吧.
首先,我们建个包含我们控件功能的类文件.
1: using
System; 2: using
System.Web.UI; 3: using
System.Web.UI.WebControls; 4: 5: namespace
CustomValidators 6: { 7: ///
<summary> 8: /// Summary description
for Class1. 9: ///
</summary> 10: 11: //--
从 BaseValidator 类继承过来, 从而可以基类的一些功能. 12: public
class CreditCardValidator :
BaseValidator13: { 14: protected
override bool
EvaluateIsValid() 15: { 16: //-- 把validation
控件的 controltovalidate
值赋给valueToValidate. 17: string
valueToValidate =
this.GetControlValidationValue(this.ControlToValidate); 18: int
indicator = 1; //--
每隔一位数的标记 19: int
firstNumToAdd = 0; //--
用来储存第一组数字的和 20: int
secondNumToAdd = 0; //--
用来储存第二组数字的和 21: string
num1; //--
用于当每隔一位数相加的和大于10时,储存最左边的整数 22: 23: string
num2; //--
用于当每隔一位数相加的和大于10时,储存最右边的整数 24: 25: 26: //--
把信用卡号字符串转换为一个字符数组 27: char[]
ccArr =
valueToValidate.ToCharArray(); 28: 29: for
(int
i=ccArr.Length-1;i>=0;i--) 30: { 31: char
ccNoAdd =
ccArr[i]; 32: int ccAdd
=
Int32.Parse(ccNoAdd.ToString()); 33: if
(indicator ==
1) 34: { 35: //--
当我们碰到奇数位时,将它加入到总值里 36: firstNumToAdd
+= ccAdd; 37: //--
将标记设为0,使下一次循环跳过此程序段 38: indicator
=
0; 39: } 40: else 41: { 42: //--
如果当前整数乘以2之后大于10,就将和分为两个整数并将它们相加, 43: //--
相加的值再加到总值里. 44: 45: if
((ccAdd + ccAdd) >=
10) 46: { 47: int
temporary = (ccAdd +
ccAdd); 48: num1
=
temporary.ToString().Substring(0,1); 49: num2
=
temporary.ToString().Substring(1,1); 50: secondNumToAdd
+= (Convert.ToInt32(num1) +
Convert.ToInt32(num2)); 51: } 52: else 53: { 54: //--
否则,将它们相加,相加的值再加到总值里. 55: secondNumToAdd
+= ccAdd +
ccAdd; 56: } 57: //--
//--
将标记设为1,我们就能对下一个整数执行不同的代码 58: 59: indicator
=
1; 60: } 61: } 62: //--
如果两个数的和被10整除,那么卡是有效的,否则,无效. 63: 64: bool
isValid = false;65: if
((firstNumToAdd + secondNumToAdd) % 10 ==
0) 66: { 67: isValid
=
true; 68: } 69: else 70: { 71: isValid
=
false; 72: } 73: return
isValid; 74: } 75: } 76: }
接下来,将它保存为Validator.cs,在你的项目文件夹里.现在,为了能使用它,我们把它编译成dll.做这些你可以建一个批处理文件(.bat),也可以打开windows命令行输入以下字符:
csc /target:library /out:c:\inetpub\wwwroot\bin\Validator.dll *.cs
/r:System.dll,System.Web.dll
有了dll文件你就可能使用这个控件了.随便打开一个你喜欢的编辑器,输入以下代码:
1: <%@ Register
TagPrefix="custom" Namespace="CustomValidators" Assembly="Validator"
%> 2: 3: <html> 4: <body> 5: <form
runat="server"> 6: <asp:TextBox
ID="CCNumber" Runat="server"
/> 7: <custom:CreditCardValidator 8: ControlToValidate="CCNumber" 9: Runat="server" 10: ErrorMessage="Credit
Card Number Invalid!"
/> 11: <asp:Button
Text="Validate" Runat="server"
/> 12: </form> 13: </body> 14: </html>
保存并访问此页,输入一个测试的信用卡号码,好了,你现在已明白如何在ASP.NET中定制控件了.
|